# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.1046.15.62 -> 1.1046.15.63
#	  drivers/char/mem.c	1.35.1.6 -> 1.35.1.7
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/06/10	davidm@tiger.hpl.hp.com	1.1046.15.63
# Don't try to support uncached accesses via read()/write().
# --------------------------------------------
#
diff -Nru a/drivers/char/mem.c b/drivers/char/mem.c
--- a/drivers/char/mem.c	Mon Sep 22 13:00:33 2003
+++ b/drivers/char/mem.c	Mon Sep 22 13:00:33 2003
@@ -105,39 +105,6 @@
 }
 
 
-static ssize_t do_write_mmio(struct file * file, void *p, unsigned long realp,
-			     const char * buf, size_t count, loff_t *ppos)
-{
-	ssize_t written;
-	char byte;
-	size_t i;
-
-	/* this is slow but nobody cares... */
-
-	written = 0;
-#if defined(__sparc__) || (defined(__mc68000__) && defined(CONFIG_MMU))
-	/* we don't have page 0 mapped on sparc and m68k.. */
-	if (realp < PAGE_SIZE) {
-		unsigned long sz = PAGE_SIZE-realp;
-		if (sz > count) sz = count;
-		/* Hmm. Do something? */
-		buf+=sz;
-		p+=sz;
-		count-=sz;
-		written+=sz;
-	}
-#endif
-	for (i = 0; i < count; ++i) {
-		if (get_user(byte, buf + i))
-			return -EFAULT;
-		writeb(byte, p + i);
-	}
-	written += count;
-	*ppos += written;;
-	return written;
-}
-
-
 /*
  * This funcion reads the *physical* memory. The f_pos points directly to the 
  * memory location. 
@@ -148,7 +115,6 @@
 	unsigned long p = *ppos;
 	unsigned long end_mem;
 	ssize_t read;
-	void *addr;
 
 	end_mem = __pa(high_memory);
 	if (p >= end_mem)
@@ -172,22 +138,8 @@
 		}
 	}
 #endif
-	if (uncached_access(file, (unsigned long) p)) {
-		char byte;
-		size_t i;
-
-		if (!(addr = ioremap(p, count)))
-			return -EFAULT;
-		/* this is slow but nobody cares... */
-		for (i = 0; i < count; ++i) {
-			byte = readb(addr + i);
-			if (put_user(byte, buf + i))
-				return -EFAULT;
-		}
-		iounmap(addr);
-	} else
-		if (copy_to_user(buf, __va(p), count))
-			return -EFAULT;
+	if (copy_to_user(buf, __va(p), count))
+		return -EFAULT;
 	read += count;
 	*ppos += read;
 	return read;
@@ -198,30 +150,23 @@
 {
 	unsigned long p = *ppos;
 	unsigned long end_mem;
-	ssize_t ret;
-	void *addr;
 
 	end_mem = __pa(high_memory);
 	if (p >= end_mem)
 		return 0;
 	if (count > end_mem - p)
 		count = end_mem - p;
-	if (uncached_access(file, (unsigned long) p)) {
-		if (!(addr = ioremap(p, count)))
-			return -EFAULT;
-		ret = do_write_mmio(file, addr, p, buf, count, ppos);
-		iounmap(addr);
-	} else
-		ret = do_write_mem(file, __va(p), p, buf, count, ppos);
-	return ret;
+	return do_write_mem(file, __va(p), p, buf, count, ppos);
 }
 
 static int mmap_mem(struct file * file, struct vm_area_struct * vma)
 {
 	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
+	int uncached;
 
+	uncached = uncached_access(file, offset);
 #ifdef pgprot_noncached
-	if (uncached_access(file, offset))
+	if (uncached)
 		vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 #endif
 
@@ -231,7 +176,7 @@
 	/*
 	 * Don't dump addresses that are not real memory to a core file.
 	 */
-	if (offset >= __pa(high_memory) || (file->f_flags & O_SYNC))
+	if (uncached)
 		vma->vm_flags |= VM_IO;
 
 	if (remap_page_range(vma, vma->vm_start, offset, vma->vm_end-vma->vm_start,